Magento 2 ORM 架構淺談 (1)

Magento 2 ORM 架構淺談 (1)

Posted by Magento on 2019-10-23 14:00:00

 

Magento 是一個包裝非常完整的 Framework ,除了實踐了許多設計模式( Design Pattern )的精神,也還有一些其他的 Pattern 在裡面,像是 ORM 的架構就是其中的一種,今天就來談談 ORM 的相關操作。

執行環境:

  • Ubuntu Linux 16.04 LTS
  • PhpStorm 2017.3

什麼是 ORM

ORM,全名是 Object-Relational Mapping ( 對象關係映射 ),是一種程式設計模式,用於實現物件導向語言裡不同類型系統的資料之間的轉換。它的作用是在關聯資料庫數據庫和實體( Entity )之間作一個封裝,這樣,我們在具體的操作 Object 的時候,就不需要再去和複雜的 SQL 語句打交道,只需簡單的操作對象的 Property和 Method。

什麼時候需要使用 ORM

在開發期間,常常會與資料庫做互動,無論是在 ControllerViewModel裡面,都會有可能使用到資料庫四大功能:新增 ( Insert)、刪除( Delete )、查詢( Select )、修改( Update ),而透過 ORM 幫我們封裝好的方法,就能夠快速的取得我們想要的資料,或是達到我們想要對資料庫做的操作。

建立 Model

想要使用方便的 ORM 架構,必須先從建立資料表( Table )及 Model 開始,建立資料表超過本章的教學範圍,故先從 Model 開始講起。在 Magento 2 架構中,一張資料表原則以對應到一個 Model 為主(當然你想要多個也可以),在建立 Model 的時候,需要產生 三個檔案,以我們的 Model 名稱 Employee 為例,三個 Class 分別如下:

Class Vender\Module\Model\Employee

_init('Astralweb\ORM\Model\ResourceModel\Employee');
    }
}

Class Vender\Module\Model\ResourceModel\Employee

_init('employee_entity', 'entity_id');
    }
}

Class Vender\Module\Model\ResourceModel\Employee

_init('Astralweb\ORM\Model\Employee', 'Astralweb\ORM\Model\ResourceModel\Employee');
    }
}

 

取得 ORM Collection:

Magnento 2 中若要取得 Collection 來操作 ORM 的話,有兩種方式,第一種是先宣告 Model Entity ,由 Entity 中使用 getCollection() 的方法取得,第二種是直接建立一個 Collection Class,我們來看以下兩種在宣告上的差異。

  • 宣告 Model Entity 方式
get('Astralweb\ORM\Model\Employee');
        $employeeCollection = $employeeEntity->getCollection();

* 宣告 Collection 方式

get('Astralweb\ORM\Model\ResourceModel\Employee\Collection');

在取得 Collection 之後,就可以開始對 ORM 資料表進行操作了。